<?xml version="1.0"?>
<doc>
    <assembly>
        <name>Spackle</name>
    </assembly>
    <members>
        <member name="T:Spackle.PropertyNotFoundException">
            <summary>
            Thrown in <see cref="T:Spackle.ScopeSwitcher`2"/> if a property could not be found on the target.
            </summary>
        </member>
        <member name="M:Spackle.PropertyNotFoundException.#ctor">
            <summary>
            Creates a new <see cref="T:Spackle.PropertyNotFoundException"/> instance.
            </summary>
        </member>
        <member name="M:Spackle.PropertyNotFoundException.#ctor(System.String)">
            <summary>
            Creates a new <see cref="T:Spackle.PropertyNotFoundException"/> instance
            with a specified error message.
            </summary>
            <param name="message">
            The message that describes the error.
            </param>
        </member>
        <member name="M:Spackle.PropertyNotFoundException.#ctor(System.String,System.Exception)">
            <summary>
            Creates a new <see cref="T:Spackle.PropertyNotFoundException"/> instance
            with a specified error message and a reference to the inner exception that is the cause of this exception. 
            </summary>
            <param name="message">
            The message that describes the error.
            </param>
            <param name="innerException">
            The exception that is the cause of the current exception, 
            or a null reference if no inner exception is specified. 
            </param>
        </member>
        <member name="T:Spackle.SecureRandom">
            <summary>
            Combines the security of <see cref="T:System.Security.Cryptography.RandomNumberGenerator"/>
            with the simple interface of <see cref="T:System.Random"/>.
            </summary>
        </member>
        <member name="M:Spackle.SecureRandom.#ctor">
            <summary>
            Creates a new <see cref="T:Spackle.SecureRandom"/> instance.
            </summary>
        </member>
        <member name="M:Spackle.SecureRandom.#ctor(System.Security.Cryptography.RandomNumberGenerator)">
            <summary>
            Creates a new <see cref="T:Spackle.SecureRandom"/> instance
            based on the given <see cref="T:System.Security.Cryptography.RandomNumberGenerator"/>.
            </summary>
            <param name="generator">The <see cref="T:System.Security.Cryptography.RandomNumberGenerator"/> to use.</param>
            <exception cref="T:System.ArgumentNullException">Thrown if <paramref name="generator"/> is <c>null</c>.</exception>
        </member>
        <member name="M:Spackle.SecureRandom.GetByteValues(System.UInt32,Spackle.ValueGeneration)">
            <summary>
            Gets an array of random <see cref="T:System.Byte"/> values.
            </summary>
            <param name="numberOfElements">
            The number of random elements to get.
            </param>
            <param name="values">
            Specifies if the values should be unique.
            </param>
            <returns>
            Returns an array of random <see cref="T:System.Byte"/> values.
            </returns>
            <exception cref="T:System.ArgumentException">
            Thrown if <paramref name="numberOfElements"/> exceeds the maximum value of a <see cref="T:System.Byte"/>
            and <paramref name="values"/> is equal to <c>Unique</c>.
            </exception>
            <remarks>
            If <paramref name="values"/> is equal to <see cref="F:Spackle.ValueGeneration.UniqueValuesOnly"/>,
            then the value of <paramref name="numberOfElements"/> should be small relative to 
            <see cref="F:System.Byte.MaxValue"/>. The closer the ratio of <c>numberOfElements/byte.MaxValue</c> is to 1, 
            the longer it will take for <c>GetByteValues</c> to produce a unique random set of values.
            </remarks>
        </member>
        <member name="M:Spackle.SecureRandom.GetDoubleValues(System.UInt32)">
            <summary>
            Gets an array of random <see cref="T:System.Double"/> values.
            </summary>
            <param name="numberOfElements">
            The number of random elements to get.
            </param>
            <returns>
            Returns an array of random <see cref="T:System.Double"/> values.
            </returns>
        </member>
        <member name="M:Spackle.SecureRandom.GetInt32Values(System.UInt32,Spackle.ValueGeneration)">
            <summary>
            Gets an array of random <see cref="T:System.Int32"/> values.
            </summary>
            <param name="numberOfElements">
            The number of random elements to get.
            </param>
            <param name="values">
            Specifies if the values should be unique.
            </param>
            <returns>
            Returns an array of random <see cref="T:System.Int32"/> values.
            </returns>
            <exception cref="T:System.ArgumentException">
            Thrown if <paramref name="numberOfElements"/> exceeds the maximum value of an <see cref="T:System.Int32"/>
            and <paramref name="values"/> is equal to <c>Unique</c>.
            </exception>
            <remarks>
            If <paramref name="values"/> is equal to <see cref="F:Spackle.ValueGeneration.UniqueValuesOnly"/>,
            then the value of <paramref name="numberOfElements"/> should be small relative to 
            <see cref="F:System.Int32.MaxValue"/>. The closer the ratio of <c>numberOfElements/int.MaxValue</c> is to 1, 
            the longer it will take for <c>GetInt32Values</c> to produce a unique random set of values.
            </remarks>
        </member>
        <member name="M:Spackle.SecureRandom.Next">
            <summary>
            Gets a random <see cref="T:System.Int32"/> value.
            </summary>
            <returns>
            Returns a new random <see cref="T:System.Int32"/> value between 0 (inclusive) 
            and <c>Int32.MaxValue</c> (exclusive).
            </returns>
        </member>
        <member name="M:Spackle.SecureRandom.Next(System.Int32)">
            <summary>
            Gets a random <see cref="T:System.Int32"/> value.
            </summary>
            <param name="maxValue">The upper bound of the generated random number.</param>
            <returns>
            Returns a new random <see cref="T:System.Int32"/> value between 0 (inclusive) 
            and <paramref name="maxValue"/> (exclusive).
            </returns>
            <exception cref="T:System.ArgumentException">Thrown if <paramref name="maxValue"/> is less than zero.</exception>
        </member>
        <member name="M:Spackle.SecureRandom.Next(System.Int32,System.Int32)">
            <summary>
            Gets a random <see cref="T:System.Int32"/> value.
            </summary>
            <param name="minValue">The lower bound of the generated random number.</param>
            <param name="maxValue">The upper bound of the generated random number.</param>
            <returns>
            Returns a new random <see cref="T:System.Int32"/> value between <paramref name="minValue"/> (inclusive) 
            and <paramref name="maxValue"/> (exclusive).
            </returns>
            <exception cref="T:System.ArgumentException">
            Thrown if <paramref name="maxValue"/> is less than <paramref name="minValue"/>.
            </exception>
        </member>
        <member name="M:Spackle.SecureRandom.NextBoolean">
            <summary>
            Gets a random <see cref="T:System.Boolean"/> value.
            </summary>
            <returns>
            Returns a new random <see cref="T:System.Boolean"/> value.
            </returns>
        </member>
        <member name="M:Spackle.SecureRandom.NextBytes(System.Byte[])">
            <summary>
            Fills the given buffer with random bits.
            </summary>
            <param name="buffer">The buffer to populate.</param>
        </member>
        <member name="M:Spackle.SecureRandom.NextDouble">
            <summary>
            Gets a random <see cref="T:System.Double"/> number.
            </summary>
            <returns>A <see cref="T:System.Double"/> number.</returns>
        </member>
        <member name="P:Spackle.SecureRandom.Generator">
            <summary>
            Gets the underlying <see cref="T:System.Security.Cryptography.RandomNumberGenerator"/>.
            </summary>
        </member>
        <member name="T:Spackle.Reflection.Extensions.ICustomAttributeProviderExtensions">
            <summary>
            Provides extension methods for <see cref="T:System.Reflection.ICustomAttributeProvider"/>-based objects.
            </summary>
        </member>
        <member name="M:Spackle.Reflection.Extensions.ICustomAttributeProviderExtensions.HasAttribute(System.Reflection.ICustomAttributeProvider,System.Type,System.Boolean)">
            <summary>
            Checks to see if the given provider has an attribute of a specific type.
            </summary>
            <param name="this">The <see cref="T:System.Reflection.ICustomAttributeProvider"/> to check.</param>
            <param name="attributeType">The type of the custom attribute.</param>
            <param name="inherit">When <c>true</c>, look up the hierarchy chain for the inherited custom attribute.</param>
            <returns>Returns <c>true</c> if the provider has the attribute, otherwise <c>false</c>.</returns>
            <exception cref="T:System.ArgumentNullException">
            Thrown if either <paramref name="this"/> or <paramref name="attributeType"/> is <c>null</c>.
            </exception>
        </member>
        <member name="T:Spackle.Range`1">
            <summary>
            Defines a generic range class.
            </summary>
            <typeparam name="T">The type of the range.</typeparam>
        </member>
        <member name="M:Spackle.Range`1.#ctor(`0,`0)">
            <summary>
            Creates a new <see cref="T:Spackle.Range`1"/> instance.
            </summary>
            <param name="start">The start of the range.</param>
            <param name="end">The end of the range.</param>
            <remarks>
            If <paramref name="end"/> is less than <paramref name="start"/>,
            the values are reversed.
            </remarks>
        </member>
        <member name="M:Spackle.Range`1.Contains(`0)">
            <summary>
            Checks to see if the given value is within the current range (inclusive).
            </summary>
            <param name="value">The value to check.</param>
            <returns>Returns <c>true</c> if <paramref name="value"/> is in the range; otherwise, <c>false</c>.</returns>
        </member>
        <member name="M:Spackle.Range`1.Intersect(Spackle.Range{`0})">
            <summary>
            Gets the intersection of the current <see cref="T:Spackle.Range`1"/> 
            and the target <see cref="T:Spackle.Range`1"/>.
            </summary>
            <param name="target">The target <see cref="T:Spackle.Range`1"/>.</param>
            <returns>A new <see cref="T:Spackle.Range`1"/> instance that is the intersection, 
            or <c>null</c> if there is no intersection</returns>
        </member>
        <member name="M:Spackle.Range`1.ToString">
            <summary>
            Provides a string representation of the current <see cref="T:Spackle.Range`1"/>.
            </summary>
            <returns>Returns a string in the format "(start,end)".</returns>
        </member>
        <member name="P:Spackle.Range`1.End">
            <summary>
            Gets the end of the range.
            </summary>
        </member>
        <member name="P:Spackle.Range`1.Start">
            <summary>
            Gets the start of the range.
            </summary>
        </member>
        <member name="T:Spackle.ThreadHelpers">
            <summary>
            Provides helper methods to the <see cref="T:System.Threading.Thread"/> class.
            </summary>
        </member>
        <member name="M:Spackle.ThreadHelpers.GetNamedData``1(System.String)">
            <summary>
            Gets the value of a named TLS slot.
            </summary>
            <typeparam name="T">The type of the data.</typeparam>
            <param name="name">The name of the TLS.</param>
            <returns>The value stored in the TLS.</returns>
        </member>
        <member name="M:Spackle.ThreadHelpers.SetNamedData``1(System.String,``0)">
            <summary>
            Sets the value of a named TLS slot.
            </summary>
            <typeparam name="T">The type of the data.</typeparam>
            <param name="name">The name of the TLS.</param>
            <param name="value">The value of the TLS.</param>
        </member>
        <member name="T:Spackle.Extensions.ObjectExtensions">
            <summary>
            Provides extension methods for objects.
            </summary>
        </member>
        <member name="M:Spackle.Extensions.ObjectExtensions.CheckParameterForNull(System.Object,System.String)">
            <summary>
            Throws an <see cref="T:System.ArgumentNullException"/> if the given object is <c>null</c>.
            </summary>
            <param name="this">The object to check.</param>
            <param name="parameterName">The name of the parameter in the method where <paramref name="this"/> came from.</param>
            <exception cref="T:System.ArgumentNullException">Thrown if <paramref name="this"/> is <c>null</c>.</exception>
            <remarks>
            This method is primarily used to ensure a parameter to a method is not null.
            </remarks>
        </member>
        <member name="M:Spackle.Extensions.ObjectExtensions.CheckParameterForNull(System.Object,System.String,System.String)">
            <summary>
            Throws an <see cref="T:System.ArgumentNullException"/> with the specified message if the given object is <c>null</c>.
            </summary>
            <param name="this">The object to check.</param>
            <param name="parameterName">The name of the parameter in the method where <paramref name="this"/> came from.</param>
            <param name="message">The exception message.</param>
            <exception cref="T:System.ArgumentNullException">Thrown if <paramref name="this"/> is <c>null</c>.</exception>
            <remarks>
            This method is primarily used to ensure a parameter to a method is not null.
            </remarks>
        </member>
        <member name="M:Spackle.Extensions.ObjectExtensions.IsNull(System.Object)">
            <summary>
            Checks to see if an object is null.
            </summary>
            <param name="this">The object to check.</param>
            <returns>Returns <c>true</c> if <paramref name="this"/> is <c>null</c>, otherwise <c>false</c>.</returns>
        </member>
        <member name="M:Spackle.Extensions.ObjectExtensions.HasAttribute(System.Object,System.Type,System.Boolean)">
            <summary>
            Checks to see if the object has a specific attribute.
            </summary>
            <param name="this">The object to check.</param>
            <param name="attributeType">The type of the custom attribute.</param>
            <param name="inherit">When <c>true</c>, look up the hierarchy chain for the inherited custom attribute.</param>
            <returns>Returns <c>true</c> if the object has the attribute, otherwise <c>false</c>.</returns>
            <exception cref="T:System.ArgumentNullException">
            Thrown if <paramref name="this"/> is <c>null</c>.
            </exception>
        </member>
        <member name="T:Spackle.ScopeSwitcherHelpers">
            <summary>
            Contains helper methods to use <see cref="T:Spackle.ScopeSwitcher`2"/> with
            C# static classes.
            </summary>
            <remarks>
            In C#, static classes cannot be used in generic parameters (compiler error CS0718).
            These methods provide a workaround to this restriction.
            </remarks>
        </member>
        <member name="M:Spackle.ScopeSwitcherHelpers.Switch``1(System.Type,``0,System.String,System.Action)">
            <summary>
            Creates a new <see cref="T:Spackle.ScopeSwitcher`2"/> instance with 
            the specified new value and the name of the static property to change,
            and runs <paramref name="code"/> within the switch.
            </summary>
            <param name="target">The type of the static class.</param>
            <param name="newValue">The new value to change.</param>
            <param name="propertyName">The name of the property to change.</param>
            <param name="code">The <see cref="T:System.Action"/> to run within the switch.</param>
            <exception cref="T:System.ArgumentNullException">
            Thrown if either <paramref name="target"/> or <paramref name="code"/> are <c>null</c>.
            </exception>
            <exception cref="T:System.ArgumentException">
            Thrown if <paramref name="propertyName"/> is <c>null</c> or empty.
            </exception>
            <exception cref="T:Spackle.PropertyNotFoundException">
            Thrown if a property could not be found.</exception>
            <remarks>
            With this constructor, <see cref="T:Spackle.ScopeSwitcher`2"/> will try to find the
            first public, static readable property that matches the type of <typeparamref name="TNew"/>,
            and has the same name as <paramref name="propertyName"/>.
            If one is found, it will target that property.
            </remarks>
        </member>
        <member name="M:Spackle.ScopeSwitcherHelpers.Switch``1(System.Type,``0,System.Action)">
            <summary>
            Creates a new <see cref="T:Spackle.ScopeSwitcher`2"/> instance with 
            the specified new value,
            and runs <paramref name="code"/> within the switch.
            </summary>
            <param name="target">The type of the static class.</param>
            <param name="newValue">The new value to change.</param>
            <param name="code">The <see cref="T:System.Action"/> to run within the switch.</param>
            <exception cref="T:System.ArgumentNullException">
            Thrown if either <paramref name="target"/> or <paramref name="code"/> are <c>null</c>.
            </exception>
            <exception cref="T:Spackle.PropertyNotFoundException">
            Thrown if a property could not be found.</exception>
            <remarks>
            With this constructor, <see cref="T:Spackle.ScopeSwitcher`2"/> will try to find the
            first public, static readable property that matches the type of <typeparamref name="TNew"/>.
            If one is found, it will target that property.
            </remarks>
        </member>
        <member name="T:Spackle.Extensions.RotateDirection">
            <summary>
            Specifies the rotational direction for the <seealso cref="M:Spackle.Extensions.IListOfTExtensions.Rotate``1(System.Collections.Generic.IList{``0},System.Int32,Spackle.Extensions.RotateDirection)"/> method.
            </summary>
        </member>
        <member name="F:Spackle.Extensions.RotateDirection.Positive">
            <summary>
            Move the values in the positive direction.
            </summary>
        </member>
        <member name="F:Spackle.Extensions.RotateDirection.Negative">
            <summary>
            Move the values in the negative direction.
            </summary>
        </member>
        <member name="T:Spackle.Extensions.ActionExtensions">
            <summary>
            Provides a number of extension methods for the <see cref="T:System.Action"/> delegate.
            </summary>
        </member>
        <member name="M:Spackle.Extensions.ActionExtensions.Time(System.Action)">
            <summary>
            Calculates the time it takes to run a given <see cref="T:System.Action"/>.
            </summary>
            <param name="this">The <see cref="T:System.Action"/> to time.</param>
            <returns>A <see cref="T:System.TimeSpan"/> object that contains the time it took to run <paramref name="this"/>.</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if <paramref name="this"/> is <c>null</c>.</exception>
        </member>
        <member name="M:Spackle.Extensions.ActionExtensions.Time``1(System.Action{``0},``0)">
            <summary>
            Calculates the time it takes to run a given <see cref="T:System.Action"/> with one parameter.
            </summary>
            <typeparam name="T">The type of the parameter to <paramref name="this"/>.</typeparam>
            <param name="this">The <see cref="T:System.Action"/> to time.</param>
            <param name="obj">The parameter for <paramref name="this"/>.</param>
            <returns>A <see cref="T:System.TimeSpan"/> object that contains the time it took to run <paramref name="this"/>.</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if <paramref name="this"/> is <c>null</c>.</exception>
        </member>
        <member name="M:Spackle.Extensions.ActionExtensions.Time``2(System.Action{``0,``1},``0,``1)">
            <summary>
            Calculates the time it takes to run a given <see cref="T:System.Action"/> with two parameters.
            </summary>
            <typeparam name="T1">The type of the first parameter to <paramref name="this"/>.</typeparam>
            <typeparam name="T2">The type of the second parameter to <paramref name="this"/>.</typeparam>
            <param name="this">The <see cref="T:System.Action"/> to time.</param>
            <param name="arg1">The first parameter to <paramref name="this"/>.</param>
            <param name="arg2">The second parameter to <paramref name="this"/>.</param>
            <returns>A <see cref="T:System.TimeSpan"/> object that contains the time it took to run <paramref name="this"/>.</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if <paramref name="this"/> is <c>null</c>.</exception>
        </member>
        <member name="M:Spackle.Extensions.ActionExtensions.Time``3(System.Action{``0,``1,``2},``0,``1,``2)">
            <summary>
            Calculates the time it takes to run a given <see cref="T:System.Action"/> with three parameters.
            </summary>
            <typeparam name="T1">The type of the first parameter to <paramref name="this"/>.</typeparam>
            <typeparam name="T2">The type of the second parameter to <paramref name="this"/>.</typeparam>
            <typeparam name="T3">The type of the third parameter to <paramref name="this"/>.</typeparam>
            <param name="this">The <see cref="T:System.Action"/> to time.</param>
            <param name="arg1">The first parameter to <paramref name="this"/>.</param>
            <param name="arg2">The second parameter to <paramref name="this"/>.</param>
            <param name="arg3">The third parameter to <paramref name="this"/>.</param>
            <returns>A <see cref="T:System.TimeSpan"/> object that contains the time it took to run <paramref name="this"/>.</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if <paramref name="this"/> is <c>null</c>.</exception>
        </member>
        <member name="M:Spackle.Extensions.ActionExtensions.Time``4(System.Action{``0,``1,``2,``3},``0,``1,``2,``3)">
            <summary>
            Calculates the time it takes to run a given <see cref="T:System.Action"/> with four parameters.
            </summary>
            <typeparam name="T1">The type of the first parameter to <paramref name="this"/>.</typeparam>
            <typeparam name="T2">The type of the second parameter to <paramref name="this"/>.</typeparam>
            <typeparam name="T3">The type of the third parameter to <paramref name="this"/>.</typeparam>
            <typeparam name="T4">The type of the fourth parameter to <paramref name="this"/>.</typeparam>
            <param name="this">The <see cref="T:System.Action"/> to time.</param>
            <param name="arg1">The first parameter to <paramref name="this"/>.</param>
            <param name="arg2">The second parameter to <paramref name="this"/>.</param>
            <param name="arg3">The third parameter to <paramref name="this"/>.</param>
            <param name="arg4">The fourth parameter to <paramref name="this"/>.</param>
            <returns>A <see cref="T:System.TimeSpan"/> object that contains the time it took to run <paramref name="this"/>.</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if <paramref name="this"/> is <c>null</c>.</exception>
        </member>
        <member name="T:Spackle.Extensions.IListOfTExtensions">
            <summary>
            Provides extension methods for <see cref="T:System.Collections.Generic.IList`1"/>-based objects.
            </summary>
        </member>
        <member name="M:Spackle.Extensions.IListOfTExtensions.Rotate``1(System.Collections.Generic.IList{``0},System.Int32,Spackle.Extensions.RotateDirection)">
            <summary>
            Moves all of the elements in <paramref name="this"/> in a certain direction.
            </summary>
            <typeparam name="T">The type of the members in <paramref name="this"/>.</typeparam>
            <param name="this">The list to rotate elements in.</param>
            <param name="positions">The delta value for rotation.</param>
            <param name="direction">The direction in which the values should rotate.</param>
            <exception cref="T:System.ArgumentNullException">
            Thrown if <paramref name="this"/> is <c>null</c>.
            </exception>
            <exception cref="T:System.ArgumentException">
            Thrown if <paramref name="positions"/> is negative or larger than the number 
            of elements in <paramref name="this"/>.
            </exception>
            <remarks>
            This code is based on the work presented here: http://eli.thegreenplace.net/2008/08/29/space-efficient-list-rotation/.
            </remarks>
        </member>
        <member name="M:Spackle.Extensions.IListOfTExtensions.Shuffle``1(System.Collections.Generic.IList{``0})">
            <summary>
            Shuffles the given list.
            </summary>
            <typeparam name="T">The type of the members in <paramref name="this"/>.</typeparam>
            <param name="this">The list to shuffle.</param>
            <exception cref="T:System.ArgumentNullException">Thrown if <paramref name="this"/> is <c>null</c>.</exception>
            <remarks>
            The implementation of <c>Shuffle</c> uses the Fisher–Yates shuffle, as implemented by Durstenfeld - 
            see http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle for details on this implementation.
            </remarks>
        </member>
        <member name="M:Spackle.Extensions.IListOfTExtensions.Shuffle``1(System.Collections.Generic.IList{``0},System.Random)">
            <summary>
            Shuffles the given list using the given <see cref="T:Spackle.SecureRandom"/> generator.
            </summary>
            <typeparam name="T">The type of the members in <paramref name="this"/>.</typeparam>
            <param name="this">The list to shuffle.</param>
            <param name="random">The random number generator to use.</param>
            <exception cref="T:System.ArgumentNullException">Thrown if <paramref name="this"/> or <paramref name="random"/> is <c>null</c>.</exception>
            <remarks>
            The implementation of <c>Shuffle</c> uses the Fisher–Yates shuffle, as implemented by Durstenfeld - 
            see http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle for details on this implementation.
            </remarks>
        </member>
        <member name="M:Spackle.Extensions.IListOfTExtensions.Swap``1(System.Collections.Generic.IList{``0},System.Int32,System.Int32)">
            <summary>
            Swaps two values.
            </summary>
            <typeparam name="T">The type of the members in <paramref name="this"/>.</typeparam>
            <param name="this">The list to swap elements in.</param>
            <param name="x">An index value into the given list.</param>
            <param name="y">An index value into the given list.</param>
            <exception cref="T:System.ArgumentNullException">Thrown if <paramref name="this"/> is <c>null</c>.</exception>
            <exception cref="T:System.IndexOutOfRangeException">Throw if <paramref name="x"/> and/or <paramref name="y"/> 
            are outside the bounds of the given list.</exception>
            <remarks>
            If <paramref name="x"/> and <paramref name="y"/> are equal, nothing is done to the given list.
            </remarks>
        </member>
        <member name="T:Spackle.ScopeSwitcher`2">
            <summary>
            A class that makes it easy to change a property value 
            and reset it back to its' original value via a <c>using</c> statement.
            </summary>
            <typeparam name="TTarget">The type of the target to change the property on.</typeparam>
            <typeparam name="TNew">The type of property to change.</typeparam>
            <remarks>
            <example>
            The canonical example of when you would use this class is to change 
            the cursor to an hourglass and then reset it back to its original value
            once some work is done.
            <code>
            using(var switcher = new ScopeSwitcher&lt;Cursor, Cursor&gt;(Cursor.WaitCursor))
            {
               // Perform some interesting UI work...
            }
            </code>
            The cursor will automatically change to an hourglass within the <c>using</c> block,
            and return to its original value when it exits the block.
            </example>
            </remarks>
        </member>
        <member name="M:Spackle.ScopeSwitcher`2.#ctor(`1)">
            <summary>
            Creates a new <see cref="T:Spackle.ScopeSwitcher`2"/> instance with 
            the specified new value.
            </summary>
            <param name="newValue">The new value to change.</param>
            <exception cref="T:Spackle.PropertyNotFoundException">Thrown if a property could not be found.</exception>
            <remarks>
            With this constructor, <see cref="T:Spackle.ScopeSwitcher`2"/> will try to find the
            first public, static readable property that matches the type of <typeparamref name="TNew"/>.
            If one is found, it will target that property.
            </remarks>
        </member>
        <member name="M:Spackle.ScopeSwitcher`2.#ctor(`1,System.String)">
            <summary>
            Creates a new <see cref="T:Spackle.ScopeSwitcher`2"/> instance with 
            the specified new value and the name of the static property to change.
            </summary>
            <param name="newValue">The new value to change.</param>
            <param name="propertyName">The name of the property to change.</param>
            <exception cref="T:System.ArgumentException">Thrown if <paramref name="propertyName"/> is <c>null</c> or empty.</exception>
            <exception cref="T:Spackle.PropertyNotFoundException">Thrown if a property could not be found.</exception>
            <remarks>
            With this constructor, <see cref="T:Spackle.ScopeSwitcher`2"/> will try to find the
            first public, static readable property that matches the type of <typeparamref name="TNew"/>,
            and has the same name as <paramref name="propertyName"/>.
            If one is found, it will target that property.
            </remarks>
        </member>
        <member name="M:Spackle.ScopeSwitcher`2.#ctor(`0,`1)">
            <summary>
            Creates a new <see cref="T:Spackle.ScopeSwitcher`2"/> instance with 
            the specified target and new value.
            </summary>
            <param name="target">The target to use.</param>
            <param name="newValue">The new value to change.</param>
            <exception cref="T:System.ArgumentNullException">Thrown if <paramref name="target"/> is <c>null</c>.</exception>
            <exception cref="T:Spackle.PropertyNotFoundException">Thrown if a property could not be found.</exception>
            <remarks>
            With this constructor, <see cref="T:Spackle.ScopeSwitcher`2"/> will try to find the
            first public, instance readable property that matches the type of <typeparamref name="TNew"/>.
            If one is found, it will target that property.
            </remarks>
        </member>
        <member name="M:Spackle.ScopeSwitcher`2.#ctor(`0,`1,System.String)">
            <summary>
            Creates a new <see cref="T:Spackle.ScopeSwitcher`2"/> instance with 
            the specified target, new value, and the name of the static property to change.
            </summary>
            <param name="target">The target to use.</param>
            <param name="newValue">The new value to change.</param>
            <param name="propertyName">The name of the property to change.</param>
            <exception cref="T:System.ArgumentNullException">Thrown if <paramref name="target"/> is <c>null</c>.</exception>
            <exception cref="T:System.ArgumentException">Thrown if <paramref name="propertyName"/> is <c>null</c> or empty.</exception>
            <exception cref="T:Spackle.PropertyNotFoundException">Thrown if a property could not be found.</exception>
            <remarks>
            With this constructor, <see cref="T:Spackle.ScopeSwitcher`2"/> will try to find the
            first public, instance readable property that matches the type of <typeparamref name="TNew"/>
            and has the same name as <paramref name="propertyName"/>.
            If one is found, it will target that property.
            </remarks>
        </member>
        <member name="M:Spackle.ScopeSwitcher`2.Dispose">
            <summary>
            Sets the target property's value back to its original value.
            </summary>
        </member>
        <member name="T:Spackle.Extensions.StringExtensions">
            <summary>
            Provides extension methods for the <see cref="T:System.String"/> type.
            </summary>
        </member>
        <member name="M:Spackle.Extensions.StringExtensions.AsUri(System.String)">
            <summary>
            Changes a <see cref="T:System.String"/> into a <see cref="T:System.Uri"/>
            </summary>
            <param name="this">The <see cref="T:System.String"/> to transform.</param>
            <returns>A new <see cref="T:System.Uri"/>.</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if <paramref name="this"/> is <c>null</c>.</exception>
        </member>
        <member name="T:Spackle.EventArgs`1">
            <summary>
            Defines a generic version of <see cref="T:System.EventArgs"/>, which is useful with
            <see cref="T:System.EventHandler`1"/>
            </summary>
            <typeparam name="T">The type of the event data.</typeparam>
        </member>
        <member name="M:Spackle.EventArgs`1.#ctor(`0)">
            <summary>
            Creates a new <see cref="T:Spackle.EventArgs`1"/> instance.
            </summary>
            <param name="value">The value of the event data.</param>
        </member>
        <member name="P:Spackle.EventArgs`1.Value">
            <summary>
            Gets the event data.
            </summary>
        </member>
        <member name="T:Spackle.ValueGeneration">
            <summary>
            Used by <see cref="T:Spackle.SecureRandom"/> when generating arrays of random numbers.
            </summary>
        </member>
        <member name="F:Spackle.ValueGeneration.UniqueValuesOnly">
            <summary>
            Generate only unique random numbers.
            </summary>
        </member>
        <member name="F:Spackle.ValueGeneration.DuplicatesAllowed">
            <summary>
            Generate random numbers - duplicates are allowed.
            </summary>
        </member>
        <member name="T:Spackle.Extensions.ExceptionExtensions">
            <summary>
            Provides extension methods for <see cref="T:System.Exception"/>-based objects.
            </summary>
        </member>
        <member name="M:Spackle.Extensions.ExceptionExtensions.Print(System.Exception)">
            <summary>
            Prints the contents of <paramref name="this"/> to the console's output stream.
            </summary>
            <param name="this">The <see cref="T:System.Exception"/> to print.</param>
            <exception cref="T:System.ArgumentNullException">Thrown if <paramref name="this"/> is <c>null</c>.</exception>
        </member>
        <member name="M:Spackle.Extensions.ExceptionExtensions.Print(System.Exception,System.IO.TextWriter)">
            <summary>
            Prints the contents of <paramref name="this"/> to the given <see cref="T:System.IO.TextWriter"/>.
            </summary>
            <param name="this">The <see cref="T:System.Exception"/> to print.</param>
            <param name="writer">The <see cref="T:System.IO.TextWriter"/> to write exception information to.</param>
            <exception cref="T:System.ArgumentNullException">
            Thrown if either <paramref name="this"/> or <paramref name="writer"/> is <c>null</c>.
            </exception>
        </member>
        <member name="T:Spackle.Testing.ExceptionTests`2">
            <summary>
            Provides a number of helper methods to 
            test core functionality of any custom <see cref="T:System.Exception"/>.
            </summary>
            <typeparam name="T">The type of the <see cref="T:System.Exception"/> to test.</typeparam>
            <typeparam name="TInner">The type of the inner <see cref="T:System.Exception"/> to pass to <typeparamref name="T"/>.</typeparam>
        </member>
        <member name="T:Spackle.Testing.CoreTests">
            <summary>
            Provides a base class for <see cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute"/>-attributed classes.
            </summary>
        </member>
        <member name="P:Spackle.Testing.CoreTests.TestContext">
            <summary>
            Gets or sets the current <see cref="P:Spackle.Testing.CoreTests.TestContext"/>.
            </summary>
        </member>
        <member name="M:Spackle.Testing.ExceptionTests`2.#ctor(System.String)">
            <summary>
            Creates a new <see cref="T:Spackle.Testing.ExceptionTests`2"/> with a specified message that will
            be used in the tests.
            </summary>
            <param name="message">The message to be used in the tests.</param>
        </member>
        <member name="M:Spackle.Testing.ExceptionTests`2.CreateExceptionTest">
            <summary>
            Creates an <see cref="T:System.Exception"/> of type <typeparamref name="T"/>
            and asserts that it doesn't contain an inner <see cref="T:System.Exception"/>.
            </summary>
        </member>
        <member name="M:Spackle.Testing.ExceptionTests`2.CreateExceptionWithMessageTest">
            <summary>
            Creates an <see cref="T:System.Exception"/> of type <typeparamref name="T"/>
            and asserts that it has the message and doesn't contain an inner <see cref="T:System.Exception"/>.
            </summary>
        </member>
        <member name="M:Spackle.Testing.ExceptionTests`2.CreateExceptionWithMessageAndInnerExceptionTest">
            <summary>
            Creates an <see cref="T:System.Exception"/> of type <typeparamref name="T"/>
            and asserts that it has the message and contains an inner <see cref="T:System.Exception"/>
            of type <typeparamref name="TInner"/>.
            </summary>
        </member>
        <member name="M:Spackle.Testing.ExceptionTests`2.RoundtripExceptionTest">
            <summary>
            Serializes and deserializes an <see cref="T:System.Exception"/> and ensures
            the contents are the same.
            </summary>
        </member>
        <member name="T:Spackle.Reflection.Extensions.MethodBaseExtensions">
            <summary>
            Provides extension methods for <see cref="T:System.Reflection.MethodBase"/>-based objects.
            </summary>
        </member>
        <member name="M:Spackle.Reflection.Extensions.MethodBaseExtensions.GetParameterTypes(System.Reflection.MethodBase)">
            <summary>
            Gets the types of the parameters for the given method.
            </summary>
            <param name="this">The <see cref="T:System.Reflection.MethodBase"/> to get parameter types for.</param>
            <returns>An array of <see cref="T:System.Type"/>s that map directly to the parameters (in terms of location) in the given method.</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if <paramref name="this"/> is <c>null</c>.</exception>
            <remarks>
            If <paramref name="this"/> is a <see cref="T:System.Reflection.Emit.MethodBuilder"/> or <see cref="T:System.Reflection.Emit.ConstructorBuilder"/>, 
            no parameter type information can be determined, so the returned array will be empty.
            </remarks>
        </member>
        <member name="T:Spackle.Extensions.IEnumerableOfTExtensions">
            <summary>
            Provides extension methods for <see cref="T:System.Collections.Generic.IEnumerable`1"/>-based objects.
            </summary>
        </member>
        <member name="M:Spackle.Extensions.IEnumerableOfTExtensions.AsReadOnly``1(System.Collections.Generic.IEnumerable{``0})">
            <summary>
            Transforms the given enumeration into a <see cref="T:System.Collections.ObjectModel.ReadOnlyCollection`1"/>.
            </summary>
            <typeparam name="T">The type of the members in <paramref name="this"/>.</typeparam>
            <param name="this">The enumeration to transform.</param>
            <returns>A <see cref="T:System.Collections.ObjectModel.ReadOnlyCollection`1"/> object.</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if <paramref name="this"/> is <c>null</c>.</exception>
        </member>
        <member name="T:Spackle.Extensions.TypeExtensions">
            <summary>
            Provides extension methods for <see cref="T:System.Type"/>-based objects.
            </summary>
        </member>
        <member name="M:Spackle.Extensions.TypeExtensions.GetRootElementType(System.Type)">
            <summary>
            Gets the root element type for a given <see cref="T:System.Type"/>.
            </summary>
            <param name="this">The <see cref="T:System.Type"/> to check.</param>
            <returns>Returns the root element <see cref="T:System.Type"/>.</returns>
            <exception cref="T:System.ArgumentNullException">Thrown if <paramref name="this"/> is <c>null</c>.</exception>
            <remarks>
            Certain types (e.g. arrays and byrefs) have an element type. For example,
            a byref array of integers ("int[]&amp;") has an element type of "int[]",
            which in turn has an element type of "int". This method makes it easier
            to find the root element type for any given <see cref="T:System.Type"/>.
            </remarks>
        </member>
    </members>
</doc>
